// 使用 Vite 的 import.meta.glob 方法批量引入 modules 目录下的所有 .ts 文件。
// 返回的结果是一个键值对形式的对象，键为文件路径，值为导入的模块内容。
// Record<string, any> 表示键是字符串，值可以是任意类型。
const modulesFiles: Record<string, any> = import.meta.glob('./modules/*.ts', { eager: true });

// 初始化一个空对象，用于存储所有导入的模块。
// 该对象的键为模块名称，值为模块的导出内容。
const modules: Record<string, any> = {};

// 遍历 modulesFiles 中的每个文件路径和模块内容。
for (const path in modulesFiles) {
    // 从文件路径中提取模块名称（去掉 './modules/' 前缀和 '.ts' 后缀）。
    // 正则表达式解释：
    // - ^\.\/modules\/ 表示匹配路径的开头部分 './modules/'。
    // - (.*) 表示捕获文件名（不含扩展名部分）。
    // - \.\w+$ 表示匹配文件扩展名（如 '.ts'）。
    const moduleName = path.replace(/^\.\/modules\/(.*)\.\w+$/, '$1');

    // 由于使用了 { eager: true } 选项，所有模块会在编译时同步导入。
    // globEager 返回的对象中，模块的默认导出会位于 `.default` 属性中。
    // 这里将模块的默认导出内容存入到 modules 对象中，以 moduleName 作为键。
    const value = modulesFiles[path].default;
    modules[moduleName] = value;
}

// 导出所有导入的模块，供其他地方使用。
export default modules;